#include<iostream>
#include<list>
using namespace std;
//
//void Test_push_back()
//{
//	list<int> lt;
//	lt.push_back(1);
//	lt.push_back(2);
//	lt.push_back(3);
//	lt.push_back(4);
//	lt.push_back(5);
//
//	list<int>::iterator it = lt.begin();// 迭代器遍历1到5 
//	while (it != lt.end())
//	{
//		cout << *it << " ";
//		++it;
//	}
//	cout << endl;
//
//	for (auto& e : lt)// 范围for 把1到5乘2
//	{
//		e *= 2;
//		cout << e << " ";
//	}
//	cout << endl;
//
//	list<int>::reverse_iterator rit = lt.rbegin();//反向迭代器倒着遍历
//	while (rit != lt.rend()) 
//	{
//		cout << *rit << " ";
//		rit++;
//	}
//	cout << endl;
//}
//
//void Test_other()
//{
//	list<int> lt;
//	lt.push_front(10);//头插四个
//	lt.push_front(20);
//	lt.push_front(30);
//	lt.push_front(40);
//	list<int>::iterator it = find(lt.begin(), lt.end(), 20);//在20前面插入50
//	if (it != lt.end())
//	{
//		lt.insert(it, 50);
//	}
//	for (const auto& e : lt)
//	{
//		cout << e << " ";
//	}
//	cout << "size = " << lt.size() << endl;
//
//	lt.pop_back();//尾删
//	lt.pop_front();//头删
//	it = find(lt.begin(), lt.end(), 20);//删除20
//	if (it != lt.end())
//	{
//		lt.erase(it);
//	}
//	for (const auto& e : lt)
//	{
//		cout << e << " ";
//	}
//	cout << "size = " << lt.size() << endl;
//}
//
//void Test_splice()
//{
//	list<int> lt1;
//	lt1.push_back(1);
//	lt1.push_back(2);
//	lt1.push_back(3);
//	lt1.push_back(4);
//	lt1.push_back(5);
//
//	list<int> lt2;	
//	lt2.push_back(10);
//	lt2.push_back(20);
//	lt2.push_back(30);
//	lt2.push_back(40);
//	lt2.push_back(50);
//
//	lt1.splice(lt1.end(), lt2);//把lt2接合到lt1后面
//	for (const auto& e : lt1)// 范围for遍历
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//}
//
//void Test_remove()
//{
//	list<int> lt;
//	lt.push_back(10);
//	lt.push_back(20);
//	lt.push_back(30);
//	lt.push_back(40);
//
//	lt.push_back(10);
//	lt.push_back(20);
//	lt.push_back(30);
//	lt.push_back(40);
//	for (const auto& e : lt)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	// 如果存在元素，删完
//	lt.remove(10);
//	for (const auto& e : lt)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	// 如果待删元素不存在,则无事发生
//	lt.remove(50);
//	for (const auto& e : lt)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//}
//
void Test_sort_reverse()
{
	list<int> lt;
	lt.push_back(1);
	lt.push_back(20);
	lt.push_back(2);
	lt.push_back(40);
	lt.push_back(5);
	lt.push_back(10);
	lt.push_back(30);
	lt.push_back(4);
	lt.push_back(4);
	lt.push_back(50);
	for (const auto& e : lt)
	{
		cout << e << " ";
	}
	cout << endl;

	lt.sort();
	for (const auto& e : lt)
	{
		cout << e << " ";
	}
	cout << endl;
	
	lt.reverse();// 懂我意思把
	for (const auto& e : lt)
	{
		cout << e << " ";
	}
	cout << endl;
}


int main()
{
	//Test_push_back();
	//Test_other();
	//Test_splice();
	//Test_remove();
	Test_sort_reverse();

	return 0;
}

//int main()
//{
//	int array[] = { 1, 2, 3, 4, 0, 5, 6, 7, 8, 9 };
//	int n = sizeof(array) / sizeof(int);
//	list<int> mylist(array, array + n);
//	auto it = mylist.begin();
//	while (it != mylist.end())
//	{
//		if (*it != 0)
//			cout << *it << " ";
//		else
//			it = mylist.erase(it);
//		++it;
//	}
//	return 0;
//}

// 2 
//i = 012 3 4 5
//j = 012
//JZ31 栈的压入、弹出序列
// https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106?tpId=13&&tqId=11174&rp=1&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking
//class Solution {
//public:
//	bool IsPopOrder(vector<int> pushV, vector<int> popV) {
//		if (pushV.size() != popV.size())
//		{
//			return false;
//		}
//		stack<int> st;
//		int i = 0, j = 0;
//		st.push(pushV[i++]);
//		while (1)
//		{
//			if (st.empty() || st.top() != popV[j])
//			{
//				if (i == pushV.size())
//				{
//					return false;
//				}
//				st.push(pushV[i++]);
//			}
//			else
//			{
//				st.pop();
//				++j;
//				if (st.empty() && j == popV.size())
//				{
//					return true;
//				}
//			}
//
//		}
//	}
//};
//class Solution {
//public:
//	bool IsPopOrder(vector<int> pushV, vector<int> popV) {
//		if (pushV.size() != popV.size())
//		{
//			return false;
//		}
//		stack<int> st;
//		int popi = 0;
//		for (const auto& e : pushV)
//		{
//			st.push(e);//不匹配就持续入，匹配就持续出
//			while (!st.empty() && st.top() == popV[popi])
//			{
//				st.pop();
//				++popi;
//			}
//		}
//		//return popi == popV.size();
//		return st.empty();
//	}
//};